#include "instructions/stores/astore.h"

namespace jvm {
namespace instructions {

void aStore(std::shared_ptr<rtda::Frame> frame, uint32_t index) {
    auto ref = frame->getOperandStack()->popRef();
    frame->getLocalVars().setRef(index, ref);
}

void ASTORE::execute(std::shared_ptr<rtda::Frame> frame) {
    aStore(frame, _index);
}

void ASTORE_0::execute(std::shared_ptr<rtda::Frame> frame) {
    aStore(frame, 0);
}

void ASTORE_1::execute(std::shared_ptr<rtda::Frame> frame) {
    aStore(frame, 1);
}

void ASTORE_2::execute(std::shared_ptr<rtda::Frame> frame) {
    aStore(frame, 2);
}

void ASTORE_3::execute(std::shared_ptr<rtda::Frame> frame) {
    aStore(frame, 3);
}

} // namespace instructions
} // namespace jvm